using UwinEducation.Application.Dtos;
using UwinEducation.Shared.Models;

namespace UwinEducation.Application.Common.Interfaces
{
    /// <summary>
    /// 教师课表服务接口
    /// </summary>
    public interface ITeacherScheduleService
    {
        /// <summary>
        /// 获取教师课表分页列表
        /// </summary>
        Task<PagedResult<TeacherScheduleDto>> GetPagedListAsync(TeacherSchedulePageRequest pageRequest);


        /// <summary>
        /// 获取教师课表日历列表
        /// </summary>
        Task<PagedResult<TeacherScheduleDto>> GetCalendarListAsync(TeacherSchedulePageRequest pageRequest);

        /// <summary>
        /// 获取教师课表详情
        /// </summary>
        Task<TeacherScheduleDto> GetByIdAsync(Guid id);

        /// <summary>
        /// 创建教师课表
        /// </summary>
        Task<List<TeacherScheduleDto>> CreateAsync(BatchCreateTeacherScheduleDto input);

        /// <summary>
        /// 更新教师课表
        /// </summary>
        Task<TeacherScheduleDto> UpdateAsync(UpdateTeacherScheduleDto input);

        Task<TeacherScheduleDto> UpdateDetailsAsync(UpdateTeacherScheduleDetailsDto input);
        
        /// <summary>
        /// 删除教师课表
        /// </summary>
        Task DeleteAsync(Guid id);
        /// <summary>
        /// 批量删除教师课表明细
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>

        Task DeleteDetailsAsync(List<Guid> ids);

        /// <summary>
        /// 获取教师的课表列表
        /// </summary>
        Task<List<TeacherScheduleDto>> GetByTeacherIdAsync(Guid teacherId);

        /// <summary>
        /// 获取课程的课表列表
        /// </summary>
        Task<List<TeacherScheduleDto>> GetByCourseIdAsync(Guid courseId);

        /// <summary>
        /// 获取教师的课表统计列表
        /// </summary>
        Task<PagedResult<TeacherScheduleDto>> GetStatisticsPagedListAsync(TeacherScheduleStatisticsPageRequest pageRequest);

        /// <summary>
        /// 创建教师课表详情
        /// </summary>
        Task<TeacherScheduleDto> CreateDetailsAsync(CreateTeacherScheduleDetailsDto input);

        /// <summary>
        /// 获取教师课表详情分页列表
        /// </summary>
        Task<PagedResult<TeacherScheduleDetailsDto>> GetPagedDetailsListAsync(TeacherSchedulePageRequest pageRequest);
    }
} 